
from django_redis import get_redis_connection
from meiduo_mall.utils.cookiesecret import CookieSecret
import json

"""
1.合并方向：cookie购物车数据合并到Redis购物车数据中。
2.合并数据：购物车商品数据和勾选状态。
3.合并方案：
    3.1 Redis数据库中的购物车数据保留。
    3.2 如果cookie中的购物车数据在Redis数据库中已存在，将cookie购物车数据覆盖Redis购物车数据。
    3.3 如果cookie中的购物车数据在Redis数据库中不存在，将cookie购物车数据新增到Redis。
"""


def merge_cart_cookie_to_redis(request, response):
    """
    登录后合并cookie购物车数据到Redis
    :param request: 本次请求对象，获取cookie中数据,user
    :param response: 本次响应对象，清楚cookie中的数据
    :return: response
    """
    user = request.user
    cart_str = request.COOKIES.get("carts")
    if cart_str:
        cart_dict = CookieSecret.loads(cart_str)
    else:
        cart_dict = {}

    conn = get_redis_connection("carts")
    for sku_id, v in cart_dict.items():
        # redis: hset() -- 不存在新增，存在修改
        conn.hset("carts_%s"%user.id, sku_id, cart_dict[sku_id]["count"])
        if cart_dict[sku_id]["selected"]:
            conn.sadd("selected_%s"%user.id, sku_id)
        else:
            conn.srem("selected_%s"%user.id, sku_id)

    # (4)、删除cookie购物车数据返回响应对象
    response.delete_cookie("carts")
    return response

